/* //安装vuex，引入vuex配置文件用于跨组件通信
import { createStore } from "vuex";

export default createStore({
  state: {
    // 定于菜单展开状态初始值
    isCollapse: false,
    // 定义面包屑初始值
    selectedMenu: null, // 当前选中的菜单项
    // 定义面包屑带子菜单默认参数为空数组
    parentMenus: [], // 当前选中的菜单项的所有父菜单项
    //定义默认tag全局跨组件引用初始值
    tabsList: [
      {
        path: "/",
        name: "home",
        label: "首页",
        icon: "home",
      },
    ],
    currentMenu: null, // 新增当前激活的菜单对象[5](@ref)
  },
  mutations: {
    // vuex跨组件通信中收缩菜单的逻辑
    updateIsCollapse(state) {
      state.isCollapse = !state.isCollapse;
    },
    // 以下是对标签的操作逻辑
    // 1.标签显示逻辑
    selectMenu(state, { val, parentMenus }) {
      // 确保传入的对象不为空
      if (!val || !parentMenus) return;

      // 处理home页面的情况
      if (val.name === "home") {
        state.currentMenu = null;
      } else {
        // 更新当前菜单
        state.currentMenu = { ...val }; // 使用对象展开符避免直接修改原对象

        // 标签列表处置逻辑
        const result = state.tabsList.findIndex(
          (item) => item.name === val.name,
        );
        if (result === -1) {
          // 如果不存在，则添加新的菜单项
          state.tabsList.push({ ...val }); // 同样使用对象展开符
        }
      }
      // 更新父级菜单列表
      // state.parentMenus = [ ...parentMenus ];// 创建新数组以触发视图更新
      state.parentMenus = parentMenus.map(menu => ({
    path: menu.path,
    label: menu.label 
  }));
    },

    // 2..tag标签删除一个标签的逻辑
    closeTab(state, val) {
  const index = state.tabsList.findIndex(item => item.name === val.name);
  state.tabsList.splice(index, 1);

  // 新增联动逻辑
  if (state.currentMenu?.name === val.name) {
    // 删除的是当前激活标签
    const prevTab = state.tabsList[index - 1] || state.tabsList[0];
    state.currentMenu = prevTab;
    state.parentMenus = prevTab.parentMenus || [];
    
    // 触发路由跳转（需在组件中配合）
    this._vm.$router.push(prevTab.path);
  }
    },
    // 3..清除所有标签
    closeAllTabs(state) {
      // 逐个移除 tabsList 中的标签
      // 保留主页标签，逐个移除其他标签
      while (state.tabsList.length > 1) {
        state.tabsList.pop();
      }
      state.currentMenu = null;
      state.parentMenus = null;
    },
    // 返回首页逻辑
    selectHome(state) {
      // 清空当前菜单选择
      state.currentMenu = null;
      state.parentMenus = null;
      state.selectedMenu = null;
    },
  },
  actions: {
    gotoHomePage({ commit }, router) {
      commit("selectHome");
      if (router) router.push("/"); // 使用传入的router实例导航到首页
    },
  },
  modules: {},
});
 */

import { createStore } from "vuex";
import router from "../router"; // 根据项目实际路径配置

/**
 * Vuex全局状态管理
 * 包含侧边栏状态、标签页管理、面包屑导航等功能
 */
export default createStore({
  state: {
    // 侧边栏折叠状态
    isCollapse: false,
    // 当前激活菜单的父级路径信息（用于面包屑）
    activeParentMenus: [],
    // 标签页列表（默认包含首页）
    tabsList: [
      {
        path: "/",
        name: "home",
        label: "首页",
        icon: "home"
      }
    ],
    // 当前激活的菜单项
    currentMenu: null
  },

  mutations: {
    /**
     * 切换侧边栏折叠状态
     */
    toggleSidebar(state) {
      state.isCollapse = !state.isCollapse;
    },

    /**
     * 更新当前选中菜单
     * @param {Object} val - 菜单项对象
     * @param {Array} parentMenus - 父级菜单路径数组
     */
    setActiveMenu(state, { val, parentMenus }) {
      if (!val || !parentMenus) return;

      // 处理首页特殊情况
      if (val.name === "home") {
        state.currentMenu = null;
        state.activeParentMenus = [];
      } else {
        state.currentMenu = { ...val };
        state.activeParentMenus = parentMenus.map(menu => ({
          path: menu.path,
          label: menu.label
        }));

        // 添加新标签页（如果不存在）
        const exists = state.tabsList.some(item => item.name === val.name);
        if (!exists) {
          state.tabsList.push({
            ...val,
            parentMenus: state.activeParentMenus // 保存父级路径信息
          });
        }
      }
    },

    /**
     * 关闭指定标签页
     * @param {Object} tab - 要关闭的标签页对象
     */
    closeTab(state, tab) {
      const index = state.tabsList.findIndex(item => item.name === tab.name);
      if (index === -1) return;

      state.tabsList.splice( index, 1 );
      

      // 如果关闭的是当前激活标签
      if (state.currentMenu?.name === tab.name) {
        const prevTab = state.tabsList[index - 1] || state.tabsList[0];
        state.currentMenu = prevTab;
        state.activeParentMenus = prevTab.parentMenus || [];
      }
    },
    /**
     * 更新标签页（保留首页）
     */
    updateTabs(state, newTabs) {
      state.tabsList = newTabs
    },

    /**
     * 关闭所有标签页（保留首页）
     */
    closeAllTabs(state) {
      state.tabsList = [state.tabsList[0]];
      state.currentMenu = null;
      state.activeParentMenus = [];
    },

    /**
     * 重置到首页状态
     */
    resetToHome(state) {
      state.currentMenu = null;
      state.activeParentMenus = [];
    }
  },

  actions: {
    /**
     * 关闭标签页并导航到相邻页面
     */
    async closeTabWithNavigation({ commit, state }, tab) {
      commit("closeTab", tab);
      
      if (state.currentMenu) {
        await router.push(state.currentMenu.path);
      } else {
        await router.push("/");
      }
    },

    /**
     * 导航回首页
     */
    navigateToHome({ commit }) {
      commit("resetToHome");
      router.push("/");
    }
  },

  modules: {}
});